package com.itheima.d2_collection_exception;
import java.util.*;

/**
 * 目标：理解集合的并发修改异常问题，并解决。
 *
 * 迭代器使用的过程中，不能用集合直接增删数据否则会报错。
 */
public class CollectionTest1 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("王麻子");
        list.add("小李子");
        list.add("李爱花");
        list.add("张全蛋");
        list.add("晓李");
        list.add("李玉刚");
        System.out.println(list);
        //  [王麻子, 小李子, 李爱花, 张全蛋, 晓李, 李玉刚]

        // 需求：找出集合中全部带“李”的名字，并从集合中删除。



//        for (int i = 0; i < list.size(); i++) {
//            String name = list.get(i);
//            if (name.contains("李")) {
////                list.remove(i); //List特有的带索引的方法
//                list.remove(name); //Collection中继承的方法
//                i--; //避免漏遍历元素的问题
//            }
//        }
//        System.out.println("list = " + list);



//        //迭代器在遍历的过程中，不允许集合底层结构发生变化，否则就会异常
//        Iterator<String> iter = list.iterator();
//        while (iter.hasNext()) {
//            String name = iter.next(); //报错：ConcurrentModificationException
//            if (name.contains("李")) {
//                list.remove(name);
//                list.add("呵呵");
//            }
//        }



//        for (String name : list) {
//            if (name.contains("李")) {
//                list.remove(name);
//            }
//        }



        //使用迭代器也可以删除数据
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()) {
            String name = iter.next();
            if (name.contains("李")) {
                iter.remove(); //使用迭代器进行删除
            }
        }

        System.out.println("list = " + list);
    }
}
